package zw_1001_1100.zw_1021_删除最外层的括号;

import java.util.ArrayList;

/**
 * 输入：s = "(()())(())"
 * 输出："()()()"
 * 解释：
 * 输入字符串为 "(()())(())"，原语化分解得到 "(()())" + "(())"，
 * 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/remove-outermost-parentheses
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

class Solution {
    public static void main(String[] args) {
        String s = "()()";
        String ss = removeOuterParentheses(s);
        System.out.println(ss);
    }

    /**
     * 双指针模拟
     * 和其他「有效括号」问题一样，我们将 ( 记为 1 分，将 ) 记为 −1。
     * 由于 s 本身为有效字符串，因此我们可以从前往后进行处理，每一次找到符合 socre=0 的连续段 [i,j)，然后再结合题意，删掉外层括号，
     * 即将 [i+1,j−1) 加入答案。
     *
     * @param s
     * @return
     */
    public static String removeOuterParentheses(String s) {
        char[] cs = s.toCharArray();
        int n = cs.length;
        StringBuilder sb = new StringBuilder();
        for (int i = 0, score = 0; i < n; ) {
            int j = i;
            while (i == j || score != 0) {
                if (cs[j++] == '(') {
                    score += 1;
                } else {
                    score += -1;
                }
//                score += cs[j++] == '(' ? 1 : -1;
            }
            sb.append(s, i + 1, j - 1);
            i = j;
            score = 0;
        }
        return sb.toString();
    }


//    public static String removeOuterParentheses(String s) {
//        int left = 0, right = 0;
//        String ans = "";
//        for (int i = 0; i < s.length(); i++) {
//            if (s.charAt(i) == '(') {
//                left++;
//                if (left == 1) {
//                    continue;
//                } else {
//                    ans += '(';
//                }
//            } else {
//                right++;
//                if (left > 1 && right != left) {
//                    ans += ')';
//                }
//                if (right == left) {
//                    left = 0;
//                    right = 0;
//                }
//            }
//        }
//        return ans;
//    }


//    public static String removeOuterParentheses(String s) {
//        int flag = 0, left = 0, right = 0;
//        String ans = "";
//        for (int i = 0; i < s.length(); i++) {
//            if (s.charAt(i) == '(') {
//                left++;
//            }
//            if (s.charAt(i) == ')') {
//                right++;
//            }
//            if (left == right) {
//                if (left > 1) {
//                    ans += s.substring(flag + 1, i);
//                }
//                left = 0;
//                right = 0;
//                flag = i + 1;
//            }
//        }
//        return ans;
//    }
}